<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1、call方法
        // function fn(names,ages){
        //     // 当使用call 时  可以理解为 将代码更换为obj.name = names
        //     this.name = names;
        //     this.age = ages;
        // }
        // // fn('lisi',20);  直接调用fn函数 函数代码中this表示window 所以最终给window对象添加了属性
        // let obj = {};
        // // call 会将函数调用 并且修改this指向
        // // 因为call是属于Function下的方法  每一个function函数 都是Function 的实例对象
        // // let fn2 = new Function()
        // // call方法是用于修改函数体中this的指向 call方法第一个参数表示修改的对象，后面的其他参数表示 调用函数时传递的参数
        // fn.call(obj,'lisi',20)
        // console.log(obj);

        // 2、apply
        // function fn(names,ages){
        //     this.name = names;
        //     this.age = ages;
        // }
        // let obj = {};

        // // apply第二个参数 是调用函数时传递的参数
        // fn.apply(obj,['lisi',20])
        // console.log(obj)

        function fn(names,ages){
            this.name = names;
            this.age = ages;
        }
        let obj = {};
        // bind 只修改this指向 不会将函数调用,将修改完之后的结果返回(新的函数)
        let fn2 = fn.bind(obj)
        console.log(fn2);
        fn2('lisi',20)
        console.log(obj)

       







    </script>
</body>
</html>